package com.dingding.common.core.base.daox.impl;

import org.apache.log4j.Logger;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Component;

import com.dingding.common.core.base.daox.IBaseDaoX;
import com.dingding.common.core.base.daox.base.AbstractBaseDao;

/**
 * 
 * @ClassName: BaseDaoXImpl 
 * @author CHEHAUNBO 
 * @date 2016年8月21日 下午2:18:48
 * @version V1.0
 * @since V2.4.0
 * 
 */

@SuppressWarnings("all")
@Component("baseDaoX")
public class BaseDaoXImpl extends AbstractBaseDao implements IBaseDaoX {

	protected Logger log = Logger.getLogger(this.getClass());

	/**
	 * 
	 * @Title: getById 
	 * @Description: 根据ID获取实体对象 
	 * @param id 主键ID
	 * @author CHEHUANBO
	 * 
	 */
	@Override
	public <T> T getById(String id, Class<T> clazz) {

		T t = null;
		try {
			t = super.getTemplate().get(clazz, id);
		} catch (DataAccessException e) {
			log.error("根据ID获取数据对象出现异常！", e);
		}
		return t;

	}

	/**
	 * 
	 * @Title: save 
	 * @Description: 保存实体对象
	 * @param entity 待保存的实体
	 * @author CHEHUANBO
	 * 
	 */
	@Override
	public <T> boolean save(T entity) {

		try {
			super.getTemplate().save((T)entity);
			return true;
		} catch (DataAccessException e) {
			log.error("保存数据对象出现异常！", e);
		}

		return false;
	}

	/**
	 * 
	 * @Title: update 
	 * @Description: 更新实体对象
	 * @param entity 待更新的实体
	 * @author CHEHUANBO
	 * 
	 */
	public <T> boolean update(T entity) {

		try {
			super.getTemplate().update((T)entity);
			return true;
		} catch (DataAccessException e) {
			log.error("更新数据对象出现异常！", e);
		}

		return false;

	}

	/**
	 * 
	 * @Title: delete 
	 * @Description: 删除实体对象
	 * @param entity 待删除的实体
	 * @author CHEHUANBO
	 * 
	 */
	public <T> boolean delete(T entity) {

		try {
			super.getTemplate().delete((T)entity);
			return true;
		} catch (DataAccessException e) {
			log.error("删除数据对象出现异常！", e);
		}

		return false;

	}

	@Override
	public <T> boolean saveOrUpdate(T entity) {
		
		try {
			super.getTemplate().saveOrUpdate((T)entity);
			return true;
		} catch (DataAccessException e) {
			log.error("删除数据对象出现异常！", e);
		}
		
		return false;
	}
	
	/**
	 * 
	 * @Title: getById 
	 * @Description: 根据ID获取实体对象 
	 * @param id 主键ID
	 * @author CHEHUANBO
	 * 
	 */
	@Override
	public <T> T getById(Integer id, Class<T> clazz) {

		T t = null;
		try {
			t = super.getTemplate().get(clazz, id);
		} catch (DataAccessException e) {
			log.error("根据ID获取数据对象出现异常！", e);
		}
		return t;

	}

}
